package estadosUsuario;

import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import notas.Nota;
import sistema.AreaDeInteres;
import sistema.Sistema;
import sistema.Usuario;
import callForPapers.CallForPaper;
import callForPapers.Paper;
import estadosPaper.Estado;

public class Logueado extends EstadoUsuario {

	@Override
	public void desLoguerse(Usuario usuario) {
		usuario.setEstado(new DesLogueado());
	}

	@Override
	public void loguearse(String nombre, String password) {
		try {
			throw new Exception("Ya estas logueado");
		} catch (Exception e) {
			e.getMessage();
		}
	}

	@Override
	public void crearCallForPaper(String nombre,
			Calendar fechaTopeDePresentacion, Calendar fechaTopeRevision,
			Set<AreaDeInteres> areasDeInteres, Usuario usuario) {

		Sistema.getInstance().agregarCfp(
				new CallForPaper(usuario, nombre, fechaTopeDePresentacion,
						fechaTopeRevision, areasDeInteres, Sistema
								.getInstance()));
	}

	@Override
	public void crearCallForPaper(String nombre,
			Calendar fechaTopeDePresentacion, Calendar fechaTopeRevision,
			AreaDeInteres areasDeInteres, Usuario usuario) {

		Sistema.getInstance().agregarCfp(
				new CallForPaper(usuario, nombre, fechaTopeDePresentacion,
						fechaTopeRevision, areasDeInteres, Sistema
								.getInstance()));
	}

	@Override
	public List<Usuario> filtrarRevisoresPorAfinidad(CallForPaper callForPaper) {
		return callForPaper.posiblesRevisores();
	}

	@Override
	public Map<String, Set<CallForPaper>> verAsignacionesACFP(Usuario usuario) {

		Map<String, Set<CallForPaper>> map = new HashMap<String, Set<CallForPaper>>();

		map.put("Soy Revisor", new HashSet<CallForPaper>());
		map.put("Soy Autor", new HashSet<CallForPaper>());

		for (Paper paper : usuario.getPapersARevisar()) {
			map.get("Soy Revisor").add(
					Sistema.getInstance().cfpAlQuePertenezco(paper));
		}

		Set<Paper> papersAutor = Sistema.getInstance().papersAutor(usuario);

		for (Paper paper : papersAutor) {

			map.get("Soy Autor").add(
					Sistema.getInstance().cfpAlQuePertenezco(paper));

		}
		return map;
	}

	@Override
	public void agregarRevisor(Usuario usuario, CallForPaper cfp) {
		cfp.agregarRevisor(usuario);
	}

	@Override
	public void calificarPaper(Paper paper, String comentario, Nota nota) {

		nota.setComentario(comentario);
		paper.agregarNota(nota);

	}

	@Override
	public Map<String, String> verNotasYComentarios(Paper paper) {

		return paper.verNotasYComentarios();
	}

	@Override
	public List<Paper> verPapersComoRevisor(CallForPaper cfp, Usuario usuario) {
		return cfp.mostrarPapersComoRevisor(usuario);

	}

	@Override
	public Map<Paper, Estado> verPapersYEstadosComoAutor(CallForPaper cfp,
			Usuario usuario) {

		Map<Paper, Estado> mapPaperEstado = new HashMap<Paper, Estado>();

		for (Paper paper : cfp.getPapers()) {
			if (paper.esAutor(usuario)) {
				mapPaperEstado.put(paper, paper.getEstado());
			}
		}
		return mapPaperEstado;
	}

}
